/**
 * 防抖函数（极简版，原函数不涉及this时使用）
 * @param func 不需要访问this的函数
 * @param delay 延迟时间(ms)
 * @returns 防抖处理后的函数
 */
export function debounce<T extends (...args: any[]) => any>(
  func: T,
  delay: number
) {
  let timeoutId: number | null = null;

  // 去掉 this 类型声明，直接接收参数
  return function (...args: Parameters<T>) {
    if (timeoutId) {
      window.clearTimeout(timeoutId);
    }

    timeoutId = window.setTimeout(() => {
      // 直接调用 func，不用 apply 传递 this（反正原函数不用）
      func(...args); 
      timeoutId = null;
    }, delay);
  };
}

export function debounce2<T extends (...args:any[])=> any>(
  func:T,
  delay:number
){
  let timeoutId:number | null = null;

  return function(...args:Parameters<T>){
    if(timeoutId)
    {
      window.clearTimeout(timeoutId);
    }

    timeoutId=setTimeout(()=>{
      func(...args);
      timeoutId=null
    },delay);
  }
}